#ifndef WORKTHREAD_H
#define WORKTHREAD_H
#include <QDebug>
#include <QUdpSocket>
#include <QThread>
#include <QHostAddress>

class UdpSocket;
class QTimer;
class WorkThread : public QThread {
  Q_OBJECT
public:
  WorkThread();

    /**
   * @brief setAddr
   * @param addr
   * @param port
   */
  void   setAddr(const QHostAddress &addr,quint16 port);

  /**
   * @brief 结束线程
   */
  void stopThread();

  /**
   * @brief 发送数据
   * @param arr
   */
   void  sendData(const QString &data);

public slots:
  void onDisconnected();
  void onReadyRead();

signals:

  /**
   * @brief 传递消息
   * @param info
   * @note 因为子线程不能更新界面
   */
  void showMessage(const QString &info);

  /**
   * @brief 发送消息的信号
   * @param arr
   */
  void doSend(const QString &data);

  void onThreadStoped(WorkThread *th);

protected:
  virtual void run() override;

private:
  // 只能定义指针，在子线程中创建QUdpSocket 对象,不然在子线程中收发消息会出错。
  //UdpSocket *m_udp;
  QUdpSocket  *m_udp; //不能这样在主线程中创建对象。
  QHostAddress m_serverAddr;
  quint16 m_port;
  QTimer *m_timer; ///< 心跳定时器
};

#endif // RECVTHREAD_H
